home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / ggraph / axis.c < prev    next >
C/C++ Source or Header  |  1989-07-12  |  6KB  |  167 lines

  1. #include <stdio.h>
  2. #include <errno.h>
  3. #include <strings.h>
  4. #include <math.h>
  5. #include "ggraph.h"
  6. #include "ggraphdefs.h"
  7.  
  8. /****************************************************************
  9.  *                                *
  10.  *    drawaxis - draw the axis for the graph            *
  11.  *        xlabel - the label for the X axis        *
  12.  *        ylabel - the label for the Y axis        *
  13.  *        axistype - the line type to use            *
  14.  *        xticks - number of ticks on X axis        *
  15.  *        yticks - number of ticks on Y axis        *
  16.  *        dxticks - delta for ticks on X axis        *
  17.  *        dyticks - delta for ticks on Y axis        *
  18.  *        sxtick - starting value for ticks on X axis    *
  19.  *        sytick - starting value for ticks on Y axis    *
  20.  *                                *
  21.  ****************************************************************/
  22. drawaxis()
  23. {
  24.     register int i;
  25.     char    s[20];
  26.  
  27.  /* draw X axis */
  28.     if (xaxisf)
  29.       if(crossxsw)
  30.     drawline (cg.axline_type, cg.xorigin, 
  31.       (0.0 - cg.yoffset)*cg.scaley+cg.yorigin,
  32.        cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex, 
  33.         (0.0 - cg.yoffset)*cg.scaley+cg.yorigin);
  34.       else
  35.     drawline (cg.axline_type, cg.xorigin, cg.yorigin,
  36.         cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex, cg.yorigin);
  37.  /* draw Y axis */
  38.     if (yaxisf)
  39.       if(crossysw)
  40.     drawline (cg.axline_type, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin, 
  41.       cg.yorigin, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin,
  42.           cg.yorigin + cg.numticky * cg.dticky * cg.scaley);
  43.       else
  44.     drawline (cg.axline_type, cg.xorigin, cg.yorigin,
  45.         cg.xorigin, cg.yorigin + cg.numticky * cg.dticky * cg.scaley);
  46.     for (i = cg.firstxsw; i <= cg.numtickx; i++) {/* draw X grid lines */
  47.     /* draw a tick mark */
  48.     if (xtickf)
  49.       if(crossxsw)
  50.         drawline (cg.axline_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  51.             (0.0 - cg.yoffset)*cg.scaley+cg.yorigin, cg.xorigin +
  52.             (i * cg.dtickx * cg.scalex), (0.0 - cg.yoffset)*cg.scaley+cg.yorigin - 4.0);
  53.       else
  54.         drawline (cg.axline_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  55.             cg.yorigin, cg.xorigin +
  56.             (i * cg.dtickx * cg.scalex), cg.yorigin - 4.0);
  57.     /* draw a dotted grid line */
  58.     if (xgridf)
  59.         drawline (cg.xgrid_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  60.             cg.yorigin, cg.xorigin + (i * cg.dtickx * cg.scalex),
  61.             cg.yorigin + (cg.numticky * cg.dticky * cg.scaley));
  62.     /* write tick label */
  63.     if (xticklf) {
  64.         if (cg.xpreci2 != -1)
  65.           if(cg.logxsw){
  66.         sprintf (s, "%*.*f",  cg.xpreci1, cg.xpreci2,
  67. (pow((double)cg.logxtick, (double)(i+(int)(cg.xoffset)))));
  68. if(debug) printf("xtick %s %f %d %d\n", s, cg.logxtick, i, (int)(cg.xoffset)); 
  69.           }else
  70.         sprintf (s, "%*.*f",cg.xpreci1, cg.xpreci2,
  71.           (i * cg.dtickx) + cg.stickx);
  72.         else
  73.           if(cg.logxsw){
  74.         sprintf (s, "%d", (int)(0.5 + 
  75.           pow((double)cg.logxtick, (double)(i+(int)cg.xoffset))));
  76. if(debug) printf("xtick %s %f %d %d\n", s, cg.logxtick, i, (int)(cg.xoffset)); 
  77.           }else
  78.         sprintf (s, "%d", (int) ((i * cg.dtickx) + cg.stickx));
  79.           if(crossxsw)
  80.         drawctext (cg.xorigin + (i * cg.dtickx * cg.scalex),
  81.             (0.0 - cg.yoffset)*cg.scaley+cg.yorigin - 10.0,
  82.             cg.xtick.t_font, cg.xtick.t_size, s, TOPCENTER_TEXT);
  83.           else
  84.         drawctext (cg.xorigin + (i * cg.dtickx * cg.scalex),
  85.             cg.yorigin - 10.0, cg.xtick.t_font, cg.xtick.t_size,
  86.              s, TOPCENTER_TEXT);
  87.  
  88.     }
  89.     }
  90.     for (i = cg.firstysw; i <= cg.numticky; i++) {/* draw Y grid lines */
  91.     /* draw tick marks */
  92.     if (ytickf)
  93.       if(crossysw)
  94.         drawline (cg.axline_type, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin, cg.yorigin +
  95.             (i * cg.dticky * cg.scaley), (0.0 - cg.xoffset)*cg.scalex+cg.xorigin - 4.0,
  96.             cg.yorigin + (i * cg.dticky * cg.scaley));
  97.     else
  98.         drawline (cg.axline_type, cg.xorigin, cg.yorigin +
  99.             (i * cg.dticky * cg.scaley), cg.xorigin - 4.0,
  100.             cg.yorigin + (i * cg.dticky * cg.scaley));
  101.  
  102.     /* draw grid */
  103.     if (ygridf)
  104.         drawline (cg.ygrid_type, cg.xorigin,
  105.             cg.yorigin + (i * cg.dticky * cg.scaley),
  106.             cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex,
  107.             cg.yorigin + (i * cg.dticky * cg.scaley));
  108.     /* draw tick labels */
  109.     if (yticklf) {
  110.         if (cg.ypreci2 != -1)
  111.           if(cg.logysw){
  112.         sprintf (s, "%*.*f",  cg.ypreci1, cg.ypreci2,
  113. (pow((double)cg.logytick, (double)(i+(int)cg.yoffset))));
  114. if(debug) printf("ytick %s %f %d %d\n", s, cg.logytick, i, (int)(cg.yoffset)); 
  115.           }else
  116.         sprintf (s, "%*.*f", cg.ypreci1, cg.ypreci2,
  117.                   (i * cg.dticky) + cg.sticky);
  118.         else
  119.           if(cg.logysw){
  120.         sprintf (s, "%d", (int)(0.5 + pow((double)cg.logytick,
  121.          (double)(i+(int)cg.yoffset))));
  122. if(debug)printf("ytick %s %f %d %d\n", s, cg.logytick, i, (int)(cg.yoffset));
  123.           }else
  124.         sprintf (s, "%d", (int) ((i * cg.dticky) + cg.sticky));
  125.           if(crossysw)
  126.         drawctext ((0.0 - cg.xoffset)*cg.scalex+cg.xorigin - 8.0,
  127.           cg.yorigin + ((i * cg.dticky * cg.scaley) + 8.0),
  128.             cg.ytick.t_font, cg.ytick.t_size, s, TOPRIGHT_TEXT);
  129.           else
  130.         drawctext (cg.xorigin - 8.0,
  131.             cg.yorigin + ((i * cg.dticky * cg.scaley) + 8.0),
  132.             cg.ytick.t_font, cg.ytick.t_size, s, TOPRIGHT_TEXT);
  133.  
  134.     }
  135.     }
  136.  
  137.  /* draw X label */
  138.     drawctext (cg.xlabel.t_xpos, cg.xlabel.t_ypos, cg.xlabel.t_font,
  139.       cg.xlabel.t_size, cg.xlabel.t_text, TOPCENTER_TEXT);
  140.  /* draw Y label */
  141.     if(!cg.yvert)
  142.       drawctext (cg.ylabel.t_xpos, cg.ylabel.t_ypos,
  143.     cg.ylabel.t_font, cg.ylabel.t_size, cg.ylabel.t_text, TOPCENTER_TEXT);
  144.     else{            /* compute spacing for text */
  145.     drawvtext (cg.ylabel.t_xpos, cg.ylabel.t_ypos, cg.ylabel.t_font, cg.ylabel.t_size,
  146.       cg.ylabel.t_text, ycharsz[cg.ylabel.t_size]);
  147.     }
  148. }
  149.  
  150. /****************************************************************
  151.  *                                *
  152.  *    drawframe - draw a frame around the graph        *
  153.  *                                *
  154.  ****************************************************************/
  155. drawframe()
  156. {
  157.     drawline (cg.gframe.fsize, cg.gframe.frame1x, cg.gframe.frame1y,
  158.       cg.gframe.frame2x, cg.gframe.frame2y);
  159.     drawline (cg.gframe.fsize, cg.gframe.frame2x, cg.gframe.frame2y,
  160.       cg.gframe.frame3x, cg.gframe.frame3y);
  161.     drawline (cg.gframe.fsize, cg.gframe.frame3x, cg.gframe.frame3y,
  162.       cg.gframe.frame4x, cg.gframe.frame4y);
  163.     drawline (cg.gframe.fsize, cg.gframe.frame4x, cg.gframe.frame4y,
  164.       cg.gframe.frame1x, cg.gframe.frame1y);
  165.     return;
  166. }
  167.